Quality assurance for applications—particularly applications with graphical user interfaces (GUIs) or ones designed for use in connection with the World Wide Web—is increasingly important. These applications are often difficult to test because they have large sets of possible user inputs. Current approaches to testing these applications include live-subject testing, capture-replay, unit testing, crawling, and model-based testing. Live-subject testing and capture-replay approaches involve considerable manual work and require a tester to step through a set of use-case scenarios while clicking on buttons and links and entering data into forms displayed through an interface, such as a web browser supporting a web application. While these applications are often designed to constrain and guide a user through a set of scenarios, the set of all possible user inputs may be too large for manual testing. Unit test cases are generally designed to validate or analyze one user event at a time and do not adequately address the validation or analysis of sequences of user events. Crawling techniques are typically designed to visit web pages automatically. However, without user guidance (such as, for example, the specification of user inputs), crawlers may be unable to visit all possible pages of a web or other event-driven application. Model-based approaches generally rely on user specifications.